﻿using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace CD
{
    public class Servidores : BDConexion
    {

        #region Constructores

        /// <summary>
        /// Constructor Vacio.
        /// </summary>
        public Servidores() 
        { 
        
            ProcedimientoMan = "SERVIDORES_MAN";
            ProcedimientoLis = "SERVIDORES_LIS";
            ProcedimientLisNom = "SERVIDORES_LIS_NOMBRE";
            ProcedimientoLisId = "SERVIDORES_LIS_ID";
            ProcedimientoSelBus = "SERVIDORES_LIS_BUS";
            ProcedimientoImgServ = "SERVIDORES_IMAGE";
            ProcedimientoLisPareja = "SERVIDORES_LIS_PAREJA";
        }

        #endregion

        #region Metodos y Funciones Privadas

        /// <summary>
        /// Funcion para realizar los Mantenimientos.
        /// </summary>
        /// <param name="p_sAccion">Accion a realizar(Actualizar|Modificar|Eliminar).</param>
        /// <param name="p_sUsuario">Usuario que realiza el Mantenimiento.</param>
        /// <param name="p_oServidores">Objeto</param>
        /// <returns>String con el resultado del mantenimiento.</returns>
        private string RealizarMantenimiento(string p_sAccion, string p_sUsuario, CE.Servidores p_oServidores)
        {
            var sResultado = string.Empty;
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoMan))
            {
                oMySqlCommand.Parameters.Add(ParametroAccion, MySqlDbType.VarChar, 100).Value = p_sAccion;
                oMySqlCommand.Parameters.Add(ParametroUsuario, MySqlDbType.VarChar, 100).Value = p_sUsuario;
                oMySqlCommand.Parameters.Add(ParametroId, MySqlDbType.Int64, 20).Value = p_oServidores.ID_SERVIDOR;
                oMySqlCommand.Parameters.Add("FOTO", MySqlDbType.LongBlob).Value = null;   // p_oServidores.FOTO;
                oMySqlCommand.Parameters.Add("NOMBRE", MySqlDbType.VarChar, 100).Value = p_oServidores.NOMBRE;
                oMySqlCommand.Parameters.Add("APELLIDO", MySqlDbType.VarChar, 100).Value = p_oServidores.APELLIDO;
                oMySqlCommand.Parameters.Add("GENERO", MySqlDbType.VarChar, 20).Value = p_oServidores.GENERO;
                oMySqlCommand.Parameters.Add("DIRECCION", MySqlDbType.VarChar, 200).Value = p_oServidores.DIRECCION;
                oMySqlCommand.Parameters.Add("ID_DEPARTAMENTO", MySqlDbType.Int64, 20).Value = p_oServidores.ID_DEPARTAMENTO == 0 ? null : p_oServidores.ID_DEPARTAMENTO;
                oMySqlCommand.Parameters.Add("ID_MUNICIPIO", MySqlDbType.Int64, 20).Value = p_oServidores.ID_MUNICIPIO == 0 ? null : p_oServidores.ID_MUNICIPIO;
                oMySqlCommand.Parameters.Add("CORREO", MySqlDbType.VarChar, 100).Value = p_oServidores.CORREO;
                oMySqlCommand.Parameters.Add("FECHA_NACIMIENTO", MySqlDbType.Date).Value = p_oServidores.FECHA_NACIMIENTO;
                oMySqlCommand.Parameters.Add("ID_ESTADO_CIVIL", MySqlDbType.Int64, 20).Value = p_oServidores.ID_ESTADO_CIVIL;
                oMySqlCommand.Parameters.Add("ID_GRUPO", MySqlDbType.Int64, 20).Value = p_oServidores.ID_GRUPO;
                oMySqlCommand.Parameters.Add("ID_ASAMBLEA", MySqlDbType.Int64, 20).Value = p_oServidores.ID_ASAMBLEA;
                oMySqlCommand.Parameters.Add("FECHA_CONVERSION", MySqlDbType.Date).Value = p_oServidores.FECHA_CONVERSION;
                oMySqlCommand.Parameters.Add("ID_MINISTERIO", MySqlDbType.Int64, 20).Value = p_oServidores.ID_MINISTERIO == 0 ? null : p_oServidores.ID_MINISTERIO;
                oMySqlCommand.Parameters.Add("ID_BRAZO_MINISTERIO", MySqlDbType.Int64, 20).Value = p_oServidores.ID_BRAZO == 0 ? null : p_oServidores.ID_BRAZO;
                oMySqlCommand.Parameters.Add("ID_COMISION", MySqlDbType.Int64, 20).Value = p_oServidores.ID_COMISION == 0 ? null : p_oServidores.ID_COMISION;
                oMySqlCommand.Parameters.Add("ID_BARCA", MySqlDbType.Int64, 20).Value = p_oServidores.ID_BARCA == 0 ? null : p_oServidores.ID_BARCA;
                oMySqlCommand.Parameters.Add("ID_PASTOR_SERVIDOR", MySqlDbType.Int64, 20).Value = p_oServidores.ID_PASTOR == 0 ? null : p_oServidores.ID_PASTOR;
                oMySqlCommand.Parameters.Add("ES_ACTIVO", MySqlDbType.Int64, 20).Value = p_oServidores.ES_ACTIVO;
                oMySqlCommand.Parameters.Add("ES_ANCIANO", MySqlDbType.Bit).Value = p_oServidores.ES_ANCIANO;
                oMySqlCommand.Parameters.Add("PUSUARIO", MySqlDbType.VarChar, 100).Value = p_oServidores.USUARIO;
                oMySqlCommand.Parameters.Add("CONTRASENA", MySqlDbType.VarChar, 100).Value = p_oServidores.CONTRASENA;
                oMySqlCommand.Parameters.Add("ID_GRUPO_SEGURIDAD", MySqlDbType.Int64, 20).Value = p_oServidores.ID_GRUPO_SEGURIDAD == 0 ? null : p_oServidores.ID_GRUPO_SEGURIDAD;
                oMySqlCommand.Parameters.Add("ES_PERMANENTE", MySqlDbType.Bit).Value = p_oServidores.ES_PERMANENTE;
                sResultado = EjecutarComando(oMySqlCommand);
            }
            return sResultado;
        }

#endregion

        #region Metodos y Funciones Publicas

        /// <summary>
        /// Funcion para borrar objeto.
        /// </summary>
        /// <param name="p_oServidores">Entidad Objeto.</param>
        /// <returns>Strign con el resultado.</returns>
        public string Eliminar(CE.Servidores p_oServidores, string p_sUsuario)
        {
            return RealizarMantenimiento(AccionEliminar, p_sUsuario, p_oServidores);
        }
        
        /// <summary>
        /// Funcion para modificar objeto.
        /// </summary>
        /// <param name="p_oServidores">Entidad Objeto.</param>
        /// <returns>Strign con el resultado.</returns>
        public string Actualizar(CE.Servidores p_oServidores, string p_sUsuario)
        {
            return RealizarMantenimiento(AccionActualizar, p_sUsuario, p_oServidores);
        }

        /// <summary>
        /// Funcion para agregar objeto.
        /// </summary>
        /// <param name="p_oServidores">Entidad Objeto.</param>
        /// <returns>Strign con el resultado.</returns>
        public string Agregar(CE.Servidores p_oServidores, string p_sUsuario)
        {
            return RealizarMantenimiento(AccionAgregar, p_sUsuario, p_oServidores);
        }

        /// <summary>
        /// Funcion para obtener la lista completa de objetos.
        /// </summary>
        /// <returns>Lista de Objetos.</returns>
        public DataTable Listar(long p_ID_GRUPO, long p_ID_ASAMBLEA)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoLis))
            {
                oMySqlCommand.Parameters.Add("ID_ASAMBLEA", MySqlDbType.Int64, 20).Value = p_ID_ASAMBLEA;
                oMySqlCommand.Parameters.Add(ParametroId, MySqlDbType.Int64, 20).Value = p_ID_GRUPO;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }

            return oDataTable;
        }

        public DataTable ListarPorId(long p_ID_Servidor)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoLisId))
            {
                oMySqlCommand.Parameters.Add(ParametroId, MySqlDbType.Int64, 20).Value = p_ID_Servidor;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }
            return oDataTable;
        }

        public DataTable ListarPorBus(string p_ValorBus, long p_ID_GRUPO, long p_ID_ASAMBLEA)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoLis))
            {
                oMySqlCommand.Parameters.Add("id_asamblea", MySqlDbType.Int64, 20).Value = p_ID_ASAMBLEA;
                oMySqlCommand.Parameters.Add("id", MySqlDbType.Int64, 20).Value = p_ID_GRUPO;
                oMySqlCommand.Parameters.Add("valor", MySqlDbType.VarChar, 100).Value = p_ValorBus;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }
            return oDataTable;
        }

        public DataTable ListarNombre(long p_ID_GRUPO)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientLisNom))
            {
                oMySqlCommand.Parameters.Add(ParametroId, MySqlDbType.Int64, 20).Value = p_ID_GRUPO;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }
            return oDataTable;
        }

        public byte[] Imagen(long p_ID_Servidor)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoImgServ))
            {
                oMySqlCommand.Parameters.Add(ParametroId, MySqlDbType.Int64, 20).Value = p_ID_Servidor;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }
            if (oDataTable.Rows.Count > 0 )
            {
                try
                {
                    return (byte[])oDataTable.Rows[0][0];
                }
                catch
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }

        public DataTable ListarPareja(string p_Genero, long p_ID_GRUPO)
        {
            var oDataTable = new DataTable();
            using (MySqlCommand oMySqlCommand = new MySqlCommand(ProcedimientoLisPareja))
            {
                oMySqlCommand.Parameters.Add("valor", MySqlDbType.VarChar, 100).Value = p_Genero;
                oMySqlCommand.Parameters.Add(ParametroId,MySqlDbType.Int64,20).Value = p_ID_GRUPO;
                oDataTable = EjecutarConsulta(oMySqlCommand);
            }
            return oDataTable;
        }
#endregion
    }
}
